package FileIO;

import model.Constantes;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
 * @author Juan Marchese (juan.marchese@fdvsolutions.com)
 *         Date: 24/06/12
 *         Time: 14:46
 */
public class AppConfig {

    private static AppConfig INSTANCE = null;
    private int tiempoPresa;
    private int tiempoMuerto;
    private String pathEntrada;
    private String pathSalida;
    private String pathArchivoLaberinto;
    private String prefijoArchivoPacman;

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new AppConfig();
        }
    }

    public static AppConfig getInstance() {
        createInstance();
        return INSTANCE;
    }

    @SuppressWarnings("CloneDoesntCallSuperClone")
    @Override
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }

    private AppConfig() {
        levantarValores();
    }

    private void levantarValores() {
        File archivo;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            // Apertura del archivo y creacion de BufferedReader para poder hacer una lectura
            String curDir = System.getProperty("user.dir");
            curDir += Constantes.PATH_ARCH_CONFIG;
            archivo = new File(curDir);
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);

            // Lectura del fichero
            tiempoPresa = Integer.parseInt(br.readLine().split(":")[1]);
            tiempoMuerto = Integer.parseInt(br.readLine().split(":")[1]);
            pathEntrada = br.readLine().split(":")[1];
            pathSalida = br.readLine().split(":")[1];
            pathArchivoLaberinto = br.readLine().split(":")[1];
            prefijoArchivoPacman = br.readLine().split(":")[1];
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // En el finally cerramos el archivo, para asegurarnos que se cierra tanto si va bien como si salta una excepcion.
            try {
                if (fr != null) {
                    fr.close();
                }
                if (br != null) {
                    br.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    public int getTiempoPresa() {
        return tiempoPresa;
    }

    public int getTiempoMuerto() {
        return tiempoMuerto;
    }

    public String getPathEntrada() {
        return pathEntrada;
    }

    public String getPathSalida() {
        return pathSalida;
    }

    public String getPathArchivoLaberinto() {
        return pathArchivoLaberinto;
    }

    public String getPrefijoArchivoPacman() {
        return prefijoArchivoPacman;
    }
}
